OOP 10 - 回顧抽象、封裝、繼承、多型


Posted by tsungtingdu on 2021-09-30

過去一週我們提到了物件導向程式設計的重要概念,像是類別、抽象類別、介面,以及四大特徵:抽象、封裝、繼承、多型。

這裡讓我嘗試用一段話來整理這些內容之間的關係:

「物件導向程式設計」是程式設計典範當中的其中一種,透過「物件」來模擬真實世界的事物,其中包含了事物本身的屬性與操作方式,以及和其他事物之間的互動關係。

為了有效率的模擬真實世界的事物,我們開始將事物分門別類,建立各種「類別」,並在從不同類別當中抽取共同特質,建立 parent 類別或是「抽象類別」,持續建立類別之間的關係與階層結構(繼承關係)。就像是生物學當中的「界門綱目科屬種」的分類與階層關係。另一方面,我們也透過「介面」,來描述物件類別在繼承關係之外,能夠獲得(或展現)的特質與能力。

上面提到的「抽取共同特質」的過程,就是一個「抽象」的過程,讓我們能夠專注在事物真正重要的特質或概念上,隱藏其他實際的細節。而另一方面,我們可以透過「繼承」來取得並實作 parent 類別中的抽象概念或方法,以及避免撰寫重複的程式碼。

「封裝」限制了物件之間的互動權限,隱藏了實作細節,提高程式的安全性、穩定性、易用性,並降低錯誤的發生。「多型」的概念和實現能力,則讓程式碼本身具備拓展性和重複使用性,讓我們能夠更有能力的去模擬這個複雜的世界

物件導向程式設計 & 物件導向程式語言

「物件導向程式設計」是一種程式設計典範,當中包含了許多的特徵,而能夠支援(部分支援)這些特徵的程式語言,就可以廣義的稱作「物件導向程式語言」。

然而使用物件導向程式語言,不代表自己寫的程式就是依循物件導向程式設計。語言是一種工具,設計是一種思考方式。

下一步?

當我們能夠模擬真實世界的事物之後,便能夠透過程式碼、建立應用程式來處理真實世界的問題。然而,真實世界其實不斷的在變動,我們今天寫的程式碼,也許就無法面對明天的狀況。或者是,我們需要花費大量的心力來調整程式碼,才能應付這個變動的世界。

為了讓程式碼本身有更好的維護性、更容易拓展以面對各種變化,因此前輩們整理出了程式碼的設計原則 (Design Principles)。其中一個(一組)著名的設計原則就是 SOLID:

  • Single Responsibility Principle
  • Open-Closed Principle
  • Liskov's Substitution Principle
  • Interface Segregation Principle
  • Dependency Inversion Principle

在後續的章節當中,會開始介紹 SOLID。同樣的,SOLID 不是萬能,但至少提供了一個思考框架,讓我們開始思考如何好好的架構我們的程式碼。


鐵人賽發表網址:幫自己搞懂物件導向和設計模式


#OOP #Object-oriented programming #2021-ironman







Related Posts

用現成的套件建置 react 環境遇到的問題

用現成的套件建置 react 環境遇到的問題

Simple Twitter 專案開發心得

Simple Twitter 專案開發心得

Angular17 基於 Standalone 專案載入 Material Symbols (Google Icon)

Angular17 基於 Standalone 專案載入 Material Symbols (Google Icon)


Comments